Skip to content

chore: unify configuration properties - #2545

Open
rsynek wants to merge 3 commits into
TimefoldAI:mainfrom
rsynek:fix/inconsistent-properties-names
Open

chore: unify configuration properties#2545
rsynek wants to merge 3 commits into
TimefoldAI:mainfrom
rsynek:fix/inconsistent-properties-names

Conversation

@rsynek

@rsynek rsynek commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

Fixes #2496.

Renames configuration properties by the following logic:

  • user-defined properties are prefixed with "ai.timefold.model"
  • properties primarily injected by the platform are prefixed with "ai.timefold.platform" (this is not a clear split since user can override them e.g. for local testing)
  • keep "ai.timefold.storage" as a separate category (mostly injected by the platform)

Some duplicate properties removed, timefold.application.version renamed to ai.timefold.model.api-version to better reflect what it is.

Related: https://github.com/TimefoldAI/timefold-solver-enterprise/pull/795

TODO:

  • update docs when changes are approved

@rsynek
rsynek requested a review from triceo as a code owner July 30, 2026 14:23
Copilot AI review requested due to automatic review settings July 30, 2026 14:23
@rsynek
rsynek requested a review from TomCools as a code owner July 30, 2026 14:23

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR standardizes service/model configuration property names under ai.timefold.model.* (user-defined) and ai.timefold.platform.* (platform-injected), including renaming the former timefold.application.version to ai.timefold.model.api-version and updating all in-repo usages touched by the service modules.

Changes:

  • Renamed injected/configured property keys across worker, Quarkus deployment/runtime, maps client, and test modules to the new ai.timefold.model.* namespace (and kept platform-specific keys under ai.timefold.platform.*).
  • Updated default application.properties templates to use ai.timefold.model.* placeholders (notably REST base path via ai.timefold.model.api-version).
  • Updated Maven property names and build flags (.mvn/maven.config, service parent POM) to match the new configuration keys.

Reviewed changes

Copilot reviewed 19 out of 19 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
service/worker/src/main/java/ai/timefold/solver/service/worker/impl/termination/TerminationConfigParams.java Renames termination property keys to ai.timefold.model.termination.*.
service/worker/src/main/java/ai/timefold/solver/service/worker/impl/SolverWorker.java Switches injected model name/version properties to ai.timefold.model.*.
service/worker/src/main/java/ai/timefold/solver/service/worker/impl/metrics/PlatformMetricsMeterFilter.java Switches injected model identifier property to ai.timefold.model.id.
service/tools/maven-plugin/README.adoc Documents the new ai.timefold.model.api-version key for model registration/version validation.
service/test/src/main/java/ai/timefold/solver/service/test/impl/quarkus/ModelRequestSerializationCallback.java Renames test serialization toggle property to ai.timefold.model.* and fixes wording.
service/test-model/src/test/java/ai/timefold/solver/model/testmodel/OpenApiTest.java Updates injected API version property key.
service/test-model/src/test/java/ai/timefold/solver/model/testmodel/EmployeeScheduleResourceTest.java Updates injected API version property key.
service/test-model/src/test/java/ai/timefold/solver/model/testmodel/ApiVersion2ConfigProfile.java Updates overridden API version property key.
service/test-model/src/main/resources/application.properties Renames model metadata + test termination config keys to ai.timefold.model.*.
service/service-defaults/src/main/resources/application.properties Updates model metadata placeholders and REST/OpenAPI/container naming to ai.timefold.model.*.
service/quarkus/runtime/src/main/java/ai/timefold/solver/service/quarkus/deployment/rest/schema/ValidatingReaderInterceptorContext.java Renames schema validation enablement property to ai.timefold.model.schema.validation.enable.
service/quarkus/integration-tests/src/main/resources/application.properties Updates integration-test config to ai.timefold.model.*.
service/quarkus/deployment/src/test/java/ai/timefold/solver/service/quarkus/deployment/VisualizationPagesConfigTest.java Updates config keys and expected bind failure messages to the new prefix.
service/quarkus/deployment/src/test/java/ai/timefold/solver/service/quarkus/deployment/ApplicationVersionValidationTest.java Updates expected error message content for renamed API version key.
service/quarkus/deployment/src/main/java/ai/timefold/solver/service/quarkus/deployment/TimefoldModelDescriptorProcessor.java Renames all model descriptor metadata property keys and updates validation messaging.
service/quarkus/deployment/src/main/java/ai/timefold/solver/service/quarkus/deployment/config/VisualizationPagesConfig.java Renames @ConfigMapping prefix to ai.timefold.model.visualization.
service/maps/service-client/src/main/java/ai/timefold/solver/service/maps/service/client/impl/MapServiceOptionsSupplier.java Updates injected model id/version/resource property keys.
service/facade/service-parent/pom.xml Renames Maven properties (including api-version) and Quarkus plugin propagated properties.
.mvn/maven.config Renames the build flag property to ai.timefold.model.processing.disabled.

Comment on lines 83 to 87
########################
# REST API configuration
########################
quarkus.rest.path=${timefold.application.version}
quarkus.rest.path=${ai.timefold.model.api-version}

Copilot AI review requested due to automatic review settings July 30, 2026 14:44

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 19 out of 19 changed files in this pull request and generated no new comments.

Comments suppressed due to low confidence (1)

service/service-defaults/src/main/resources/application.properties:86

  • Docs in docs/src/modules/ROOT still reference the renamed properties (for example timefold.application.* and ai.timefold.platform.termination.*), so they will be incorrect after this change unless updated in the same release.
########################
# REST API configuration
########################
quarkus.rest.path=${ai.timefold.model.api-version}

@diogodanielsoaresferreira diogodanielsoaresferreira left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also added an issue for the platform to sync with the new properties when we update to this solver version https://github.com/TimefoldAI/timefold-platform/issues/5238

Comment on lines +154 to +157
"ai.timefold.model.termination.spent-limit",
"ai.timefold.model.termination.maximum-spent-limit",
"ai.timefold.model.termination.unimproved-spent-limit",
"ai.timefold.model.termination.maximum-unimproved-spent-limit",

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is also configured in the platform. Do we want to keep them with a model prefix?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That's the problem. Many properties are injected by the platform, yet they are configured in application.properties as well, typically for local runs and testing. Termination is a typical example of that, see e.g. https://github.com/TimefoldAI/timefold-employee-scheduling/blob/main/src/main/resources/application.properties#L50-L74.

Not all of them can be solved by good defaults. Some we even describe in the documentation.

Most of them are actually settings of the model, just take different values in the platform and locally.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm ok with that 👍

@sonarqubecloud

Copy link
Copy Markdown

@winklerm winklerm left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you, looks good to me!

@rsynek @diogodanielsoaresferreira I have one concern that I would like to double check:

  • After the properties are renamed, the models using the new solver service will be compatible only with the platform using the new solver service as well. That is business as usual.
  • However, also the other way around applies: all older models will stop working with the new platform. This means we will have to upgrade and release new versions of all older models used in staggered releases for selected customers and upgrade all at once.

Is my understanding correct?

@diogodanielsoaresferreira

Copy link
Copy Markdown
Contributor

Thank you, looks good to me!

@rsynek @diogodanielsoaresferreira I have one concern that I would like to double check:

* After the properties are renamed, the models using the new solver service will be compatible only with the platform using the new solver service as well. That is business as usual.

* However, also the other way around applies: all older models will stop working with the new platform. This means we will have to upgrade and release new versions of all older models used in staggered releases for selected customers and upgrade all at once.

Is my understanding correct?

Yes, technically that is correct. We can try to support old and new properties in the platform for a while, so that the models do not break.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Service: Inconsistent use of property naming.

4 participants